Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

163
Views
Devuelve un objeto en lugar de una matriz de objetos usando la función de mapa [codesandbox]

Ejemplo de CodeSandbox https://codesandbox.io/s/throbbing-worker-8s68n?file=/src/index.js

Así que tengo un objeto y estoy actualizando el nombre de la clave eliminando el __número, quiero mover la primera clave [694 y 695] al interior del objeto como id = 694. No logré que eso sucediera porque Obtengo un nuevo objeto para cada valor clave (vea el código a continuación).

 var options = { "694": { "title_694": "Tiger", "category_694": "848", "description_694": "long description" }, "695": { "title_694": "Turtles", "category_694": "347", "description_694": "long description" } }

y aquí está mi código

 Object.keys(options).map( value => ( { [value] : Object.keys(options[value]).map((keyName) => ( {[keyName.replace(/_*\d+/g, '')] : options[value][keyName]} )) } ) )

sale como se muestra a continuación

 [ { "694": [ { "title": "Tiger" }, { "category": "848" }, { "description": "long description" } ] }, { "695": [ { "title": "Turtles" }, { "category": "347" }, { "description": "long description" } ] } ]

¿Cómo puede hacer que funcione como se muestra a continuación?

 [ { "id": 694, "title": "Tiger", "category": "848", "description": "long description" }, { "id":695, "title": "Turtles", "category": "347", "description": "long description" } ]
about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Hay una manera de hacerlo sin mapa:

 var result = []; Object.keys(options).forEach((element) => { result.push({ id: element, ...options[element] }); });

Producción:

 [ { "id": "694", "title_694": "Tiger", "category_694": "848", "description_694": "long description" }, { "id": "695", "title_694": "Turtles", "category_694": "347", "description_694": "long description" } ]

Pregúntame si tienes más preguntas. Pero necesita más código para eliminar la identificación del nuevo objeto de claves

about 4 years ago · Juan Pablo Isaza Report

0

Usar forEach sin cambiar los nombres de las claves en el objeto original

 var result = []; Object.keys(options).forEach((element) => { const item = Object.fromEntries( Object.entries(options[element]).map(([k, v]) => { k = k.replace(/_*\d+/g, ""); return [k, v] }) ) result = [...result,{ id: element, ...item }] // Or you could use push which is slightly faster // To see benchmarks Google Spread operator vs push site: measurethat.net // result.push({ id: element, ...options[element] }); }); document.getElementById("app").innerHTML = `<pre>${JSON.stringify( result, null, 4 )}</pre>`; console.log(result);

La salida

 [ { "id": "694", "title": "Tiger", "category": "848", "description": "long description" }, { "id": "695", "title": "Turtles", "category": "347", "description": "long description" } ]
about 4 years ago · Juan Pablo Isaza Report

0

Personalmente, como usted, prefiero no construir manualmente una matriz completamente nueva.

 var options = { "694": { "title_694": "Tiger", "category_694": "848", "description_694": "long description" }, "695": { "title_694": "Turtles", "category_694": "347", "description_694": "long description" } } let mutated = Object.values(Object.entries(options).map(([id, option]) => { return Object.assign({ id: id, }, Object.fromEntries(Object.entries(option).map(([key, value]) => { return [key.replace(/_*\d+$/g, ''), value]; }))); }));

Esto permite que la primera función de map cree una nueva matriz en consecuencia, Object.assign garantiza que tenga un solo objeto de cada uno, y Object.entries y Object.fromEntries para convertir en una matriz de pares para luego convertir las claves y luego volver de la matriz de pares.

Lea la documentación de MDN relacionada con Object.entries : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries

Eso también enlaza con la documentación de Object.fromEntries .

Como nota al margen, modifiqué su expresión regular para incluir la coincidencia de fin de línea, de modo que modifique algo como w3tag_694 de la manera esperada. También sugeriría cambiar el * en la expresión regular a un + para ser un poco más estricto.

Hay una advertencia: fromEntries es una característica relativamente nueva, pero es compatible con todos los principales navegadores que aún son compatibles con sus creadores. Consulte el soporte: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries#browser_compatibility

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!